Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d37afb7e5e | ||
|
|
a6f094614e | ||
|
|
1150c230b6 | ||
|
|
01c7c97ec3 | ||
|
|
a362e2c070 | ||
|
|
43ef515a3b |
No files matched your search
+3
-2
@@ -4,6 +4,7 @@
|
||||
# Python virtual environment
|
||||
/.venv/
|
||||
.agents/
|
||||
.claude/
|
||||
|
||||
# Binary zip archives
|
||||
*.zip
|
||||
@@ -14,6 +15,8 @@
|
||||
*.db-wal
|
||||
*.db-shm
|
||||
!backend/db/backup/*.sql
|
||||
.env
|
||||
docker-compose.yaml
|
||||
# >>> MAM managed block (managed by install.sh — do not edit) >>>
|
||||
/.venv/
|
||||
/.mam/
|
||||
@@ -25,5 +28,3 @@
|
||||
/.mam-skill-backup.*/
|
||||
CURRENT_JOB.md
|
||||
# <<< MAM managed block <<<
|
||||
.env
|
||||
docker-compose.yaml
|
||||
+52
-8
@@ -48,6 +48,12 @@
|
||||
#default: $HOME/.config/herdr/herdr.sock
|
||||
# HERDR_SOCKET_PATH=$HOME/.config/herdr/herdr.sock
|
||||
|
||||
# Explicit Herdr workspace scope identifier (`herdr pane list --workspace <id>`).
|
||||
# Hard filters pane/agent resolution to this workspace. When unset, falls back
|
||||
# to $WORKSPACE_ROOT/.mam/herdr_workspace_id or server-global resolution.
|
||||
#default: <unset> (uses persisted .mam/herdr_workspace_id or global)
|
||||
# HERDR_WORKSPACE_ID=w1
|
||||
|
||||
# ===========================================================================
|
||||
# delegate-job / MQTT broker
|
||||
# ===========================================================================
|
||||
@@ -88,6 +94,25 @@
|
||||
#default: INFO
|
||||
# MAM_LOG_LEVEL=INFO
|
||||
|
||||
# Optional xAI API Key for Grok Build CLI (if ~/.grok/auth.json is not present).
|
||||
#default: (unset → reads ~/.grok/auth.json)
|
||||
# XAI_API_KEY=replace_me
|
||||
|
||||
# Optional multi-provider API keys for OpenCode CLI and OpenAI API key for Codex CLI.
|
||||
#default: (unset → reads ~/.local/share/opencode/auth.json or ~/.codex/auth.json)
|
||||
# ANTHROPIC_API_KEY=replace_me
|
||||
# OPENAI_API_KEY=replace_me
|
||||
# GEMINI_API_KEY=replace_me
|
||||
# GROQ_API_KEY=replace_me
|
||||
|
||||
# Optional override for Codex CLI state / session directory.
|
||||
#default: $HOME/.codex
|
||||
# CODEX_HOME=$HOME/.codex
|
||||
|
||||
# Optional inline JSON permissions configuration for OpenCode.
|
||||
#default: (unset → defaults to --auto CLI bypass)
|
||||
# OPENCODE_PERMISSION='{"*":"allow"}'
|
||||
|
||||
# Retention period (days) for delegate-job event logs.
|
||||
#default: 7
|
||||
# MAM_EVENT_RETENTION_DAYS=7
|
||||
@@ -128,19 +153,38 @@
|
||||
#default: 3
|
||||
# SKS_EMPTY_GIVEUP=3
|
||||
|
||||
# Minimum columns a pane must retain after a vertical split (2xK layout engine).
|
||||
#default: 40
|
||||
# MAM_MIN_PANE_COLS=40
|
||||
# Minimum columns a pane must retain after a horizontal/column split (2xK layout engine).
|
||||
#default: 15
|
||||
# MAM_MIN_PANE_COLS=15
|
||||
|
||||
# Minimum rows a pane must retain after a horizontal split (2xK layout engine).
|
||||
#default: 20
|
||||
# MAM_MIN_PANE_ROWS=20
|
||||
# Minimum rows a pane must retain after a vertical split (2xK layout engine).
|
||||
# Set to 0 to disable vertical row constraints (terminal scrollback handles height).
|
||||
#default: 0
|
||||
# MAM_MIN_PANE_ROWS=0
|
||||
|
||||
# Maximum number of columns a workspace may grow to before the engine reports
|
||||
# 'overflow' (which makes lib.sh create a fresh workspace instead of splitting).
|
||||
# Applies to both measured (GUI) and headless 0x0 layouts.
|
||||
#default: (unset -> no column cap)
|
||||
# MAM_MAX_PANE_COLS=3
|
||||
#default: 2
|
||||
# MAM_MAX_PANE_COLS=2
|
||||
|
||||
# Maximum number of rows per column before overflow. Default 2 guarantees an
|
||||
# even 2x2 grid; do not raise this until a resize-normalisation pass exists.
|
||||
#default: 2
|
||||
# MAM_MAX_PANE_ROWS=2
|
||||
|
||||
# Kill the session instead of preserving it when TUI readiness times out.
|
||||
#default: 0
|
||||
# MAM_KILL_ON_READY_TIMEOUT=0
|
||||
|
||||
# Number of trailing non-blank pane lines scanned for blocking modal signatures.
|
||||
#default: 8
|
||||
# MAM_DIALOG_TAIL_LINES=8
|
||||
|
||||
# Consecutive empty captures before wait_for_tui_ready declares the pane unobservable.
|
||||
# NOTE: distinct from SKS_EMPTY_GIVEUP, which governs send_keys_safe quiescence (default 3).
|
||||
#default: 5
|
||||
# MAM_READY_EMPTY_GIVEUP=5
|
||||
|
||||
# ==============================================================================
|
||||
# deploy / distribution source (for forks/mirrors)
|
||||
|
||||
+1
-1
@@ -9,7 +9,7 @@ This module implements the standalone backend REST API server, SQLite database s
|
||||
```
|
||||
+-------------------------------------------------------------+
|
||||
| SQLite (anl.db) |
|
||||
| 11 Relational Tables (Projects, Members, Pubs, Lectures) |
|
||||
| 11 Relational Tables (fProjects, Members, Pubs, Lectures) |
|
||||
+-------------------------------------------------------------+
|
||||
▲ ▲
|
||||
│ (cmd/seed) │ (SQL query)
|
||||
|
||||
+6
-4
@@ -8,6 +8,7 @@ services:
|
||||
args:
|
||||
- NEXT_PUBLIC_API_BASE_URL=${NEXT_PUBLIC_API_BASE_URL:-}
|
||||
container_name: anl-app
|
||||
user: "${UID:-1000}:${GID:-1000}"
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "${APP_PORT:-8080}:8080"
|
||||
@@ -20,7 +21,8 @@ services:
|
||||
- AUTO_MIGRATE=true
|
||||
- ADMIN_TOKEN=${ADMIN_TOKEN:?ADMIN_TOKEN must be set -- see .env.example}
|
||||
volumes:
|
||||
- anl-db-data:/app/data
|
||||
- ./volumes/data:/app/data
|
||||
# - anl-db-data:/app/data
|
||||
healthcheck:
|
||||
test: [ "CMD", "curl", "-f", "http://localhost:8080/api/v1/health" ]
|
||||
interval: 15s
|
||||
@@ -28,6 +30,6 @@ services:
|
||||
retries: 3
|
||||
start_period: 5s
|
||||
|
||||
volumes:
|
||||
anl-db-data:
|
||||
name: anl-sqlite-storage
|
||||
# volumes:
|
||||
# anl-db-data:
|
||||
# name: anl-sqlite-storage
|
||||
@@ -11,9 +11,15 @@ const EDUCATION = [
|
||||
|
||||
const CAREER = [
|
||||
{
|
||||
period: "2024. 3 - Present",
|
||||
role: "Dean",
|
||||
org: "College of IT Engineering (CITE)",
|
||||
period: "2004. 3 - Present",
|
||||
role: "Professor",
|
||||
org: (
|
||||
<>
|
||||
School of Computer Science and Engineering (CSE),
|
||||
<br />
|
||||
College of IT Engineering (CITE)
|
||||
</>
|
||||
),
|
||||
inst: "Kyungpook National University (KNU)",
|
||||
},
|
||||
{
|
||||
@@ -23,9 +29,9 @@ const CAREER = [
|
||||
inst: "Kyungpook National University (KNU)",
|
||||
},
|
||||
{
|
||||
period: "2004. 3 - Present",
|
||||
role: "Professor",
|
||||
org: "School of Computer Science and Engineering (CSE), College of IT Engineering (CITE)",
|
||||
period: "2024. 3 - 2026. 2",
|
||||
role: "Dean",
|
||||
org: "College of IT Engineering (CITE)",
|
||||
inst: "Kyungpook National University (KNU)",
|
||||
},
|
||||
{
|
||||
@@ -37,11 +43,11 @@ const CAREER = [
|
||||
];
|
||||
|
||||
const STANDARDIZATION = [
|
||||
"ISO/IEC JTC1 SC6/WG7: Reliable/Mobile Multicasting (1999 ~ 2019): Project Editor",
|
||||
"IEC TC100: Multimedia Systems and Equipment (2018 ~ Present): WG11 Convenor, Project Editor in WG12, WG30",
|
||||
"ISO/IEC JTC1 SC41/WG5: Internet-of-Things (IoT) Applications (2020 ~ Present): Project Editor",
|
||||
"ISO/IEC JTC1 SC6/WG7: Reliable/Mobile Multicasting (1999 ~ 2019): Project Editor",
|
||||
"ITU-T SG13: Mobility Management (1999 ~ 2015): Project Editor",
|
||||
"ITU-T SG20: VLC-based IoT (2018 ~ 2020): Project Editor",
|
||||
"IEC TC100: Multimedia Systems and Equipment (2018 ~ Present): Project Editor, TA15 TAM, WG11 Convenor",
|
||||
];
|
||||
|
||||
const MEMBERSHIPS = [
|
||||
@@ -83,7 +89,7 @@ export function ProfessorDetailsDialog() {
|
||||
ref={dialogRef}
|
||||
aria-labelledby="prof-dialog-title"
|
||||
onClick={handleBackdropClick}
|
||||
className="bg-paper text-ink border border-line rounded-lg p-0 max-w-2xl w-[92vw] max-h-[85vh] supports-[height:100dvh]:max-h-[85dvh] backdrop:bg-ink/50 backdrop:backdrop-blur-sm open:flex open:flex-col shadow-2xl m-auto"
|
||||
className="bg-paper text-ink border border-line rounded-lg p-0 max-w-fit w-[92vw] max-h-[85vh] supports-[height:100dvh]:max-h-[85dvh] backdrop:bg-ink/50 backdrop:backdrop-blur-sm open:flex open:flex-col shadow-2xl m-auto"
|
||||
>
|
||||
{/* Modal Header */}
|
||||
<div className="flex items-center justify-between border-b border-line p-6 bg-paper sticky top-0 z-10">
|
||||
|
||||
@@ -61,7 +61,7 @@ export default function MembersPage() {
|
||||
</h2>
|
||||
<div className="text-sm text-ink-mute leading-relaxed space-y-2">
|
||||
<p>
|
||||
Professor at the School of Computer Science and Engineering, Kyungpook National University, and Dean of the College of IT Engineering. He directs the AI Agent Networking Laboratory (ANL), leading research on QUIC/gRPC transport, A2A/ACP protocols, MCP & SKILL architectures, and multi-agent orchestration, and serves as Project Editor in ISO/IEC JTC1, ITU-T, and IEC TC100.
|
||||
He received B.S. and M.S. degrees in Management Science from KAIST, Korea in 1992 and 1994, respectively. He also received Ph.D. degree in Industrial Engineering from KAIST, Korea in 1998. From August 1998 to February 2004, he worked for Protocol Engineering Center in ETRI. Since March 2004, he has been with the school of Computer Science and Engineering in the Kyungpook National University as a professor. He directs the AI Agent Networking Laboratory (ANL), leading research on QUIC/gRPC transport, A2A/ACP protocols, MCP & SKILL architectures, and multi-agent orchestration, and serves as Project Editor in IEC TC100, ISO/IEC JTC1 and ITU-T.
|
||||
</p>
|
||||
<div>
|
||||
<ProfessorDetailsDialog />
|
||||
@@ -74,15 +74,6 @@ export default function MembersPage() {
|
||||
>
|
||||
sjkoh@knu.ac.kr
|
||||
</a>
|
||||
<span className="text-ink-mute">|</span>
|
||||
<a
|
||||
href="https://github.com/sjkoh12"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="text-ink hover:text-cobalt-dark hover:underline"
|
||||
>
|
||||
GitHub Profile ↗
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div className="lg:col-span-4 flex justify-center items-center">
|
||||
|
||||
@@ -134,7 +134,7 @@ export default function Header() {
|
||||
{/* Brand logo */}
|
||||
<Link
|
||||
href="/"
|
||||
className="group flex items-center gap-3 min-w-0 desktop:shrink-0"
|
||||
className="group flex items-center gap-3 min-w-0 nav:shrink-0"
|
||||
onClick={() => setOpen(false)}
|
||||
>
|
||||
<div className="relative flex items-center justify-center w-9 h-9 sm:w-10 sm:h-10 rounded-xl overflow-hidden shadow-sm border border-line group-hover:border-cobalt/40 group-hover:shadow-md group-hover:scale-105 transition-all duration-300 shrink-0">
|
||||
@@ -162,18 +162,16 @@ export default function Header() {
|
||||
</svg>
|
||||
</div>
|
||||
|
||||
<div className="flex flex-col leading-none min-w-0">
|
||||
<span className="headline-ko text-lg text-ink sm:text-xl font-bold tracking-tight group-hover:text-cobalt-dark transition-colors">
|
||||
ANL
|
||||
</span>
|
||||
<span className="kicker mt-1 transition-colors group-hover:text-cobalt-dark truncate">
|
||||
AI Agent Networking LAB
|
||||
</span>
|
||||
{/* Stacked wordmark — the cobalt initials spell out ANL */}
|
||||
<div className="font-sans flex flex-col min-w-0 text-[0.8rem] sm:text-[0.875rem] font-semibold leading-[1.15] tracking-tight text-ink transition-colors group-hover:text-cobalt-dark">
|
||||
<span className="whitespace-nowrap"><span className="text-cobalt">A</span>I Agent</span>
|
||||
<span className="whitespace-nowrap"><span className="text-cobalt">N</span>etworking</span>
|
||||
<span className="whitespace-nowrap"><span className="text-cobalt">L</span>aboratory</span>
|
||||
</div>
|
||||
</Link>
|
||||
|
||||
{/* Desktop nav — small caps, wide tracking (visible at >= 1240px) */}
|
||||
<div className="hidden items-center gap-4 desktop:flex">
|
||||
{/* Desktop nav — small caps, wide tracking (visible at >= 1000px; compact spacing below 1240px) */}
|
||||
<div className="hidden items-center gap-3 nav:flex desktop:gap-4">
|
||||
<nav className="flex items-center gap-2" aria-label="Main Navigation">
|
||||
{navItems.map((item) => {
|
||||
const active = isActive(item.href);
|
||||
@@ -182,7 +180,7 @@ export default function Header() {
|
||||
key={item.href}
|
||||
href={item.href}
|
||||
aria-current={active ? "page" : undefined}
|
||||
className={`group relative flex items-baseline gap-1.5 text-[0.78rem] font-semibold uppercase tracking-[0.18em] transition-all px-3 py-1.5 rounded-md ${
|
||||
className={`group relative flex items-baseline gap-1.5 text-[0.78rem] font-semibold uppercase tracking-[0.1em] desktop:tracking-[0.18em] transition-all px-2 desktop:px-3 py-1.5 rounded-md ${
|
||||
active
|
||||
? "bg-cobalt-dark text-white dark:text-ivory shadow-sm font-bold"
|
||||
: "text-ink hover:text-cobalt-dark hover:bg-paper/60"
|
||||
@@ -204,8 +202,8 @@ export default function Header() {
|
||||
<ThemeToggle />
|
||||
</div>
|
||||
|
||||
{/* Mobile controls (visible under 1240px) */}
|
||||
<div className="flex items-center gap-2 desktop:hidden">
|
||||
{/* Mobile controls (visible under 1000px) */}
|
||||
<div className="flex items-center gap-2 nav:hidden">
|
||||
<ThemeToggle />
|
||||
<button
|
||||
type="button"
|
||||
@@ -230,7 +228,7 @@ export default function Header() {
|
||||
{open && (
|
||||
<nav
|
||||
id="mobile-menu"
|
||||
className="mobile-menu-panel border-t border-ink bg-ivory desktop:hidden"
|
||||
className="mobile-menu-panel border-t border-ink bg-ivory nav:hidden"
|
||||
aria-label="Mobile Navigation"
|
||||
>
|
||||
<ul className="container-content flex flex-col py-2">
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 301 KiB After Width: | Height: | Size: 389 KiB |
File renamed without changes.
Binary file not shown.
|
Before Width: | Height: | Size: 301 KiB |
@@ -29,6 +29,8 @@ const config: Config = {
|
||||
theme: {
|
||||
extend: {
|
||||
screens: {
|
||||
// Header swaps the mobile menu for the inline nav (compact spacing until `desktop`).
|
||||
nav: "1000px",
|
||||
desktop: "1240px",
|
||||
},
|
||||
colors: {
|
||||
|
||||
Reference in new issue
Block a user